<!DOCTYPE html>
<html class="client-nojs vector-feature-night-mode-disabled vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-sticky-header-enabled" lang="en" dir="ltr"><head>
<meta charset="UTF-8">
<title>Java performance</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="canonical" href="https://en.wikipedia.org/wiki/Java_performance"> <link href="./mw/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/skins.vector.styles.css" rel="stylesheet" type="text/css">
<link href="./mw/user.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" type="text/css" href="./mw/site.styles.css">
<link rel="stylesheet" type="text/css" href="./mw/noscript.css">
<link rel="stylesheet" type="text/css" href="./footer.css">
<link rel="stylesheet" type="text/css" href="./vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Java_performance rootpage-Java_performance skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading">
<span id="openzim-page-title" class="mw-page-title-main"><span class="mw-page-title-main">Java performance</span></span>
</h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="en" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr">
<style data-mw-deduplicate="TemplateStyles:r1251242444">
/* start https://en.wikipedia.org/ */
.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style>
<p class="mw-empty-elt">
</p><p>In <a href="Software_development" title="Software development">software development</a>, the programming language <a href="Java_(programming_language)" title="Java (programming language)">Java</a> was historically considered slower than the fastest <a href="Third-generation_programming_language" title="Third-generation programming language">third-generation</a> <a href="Type_system" title="Type system">typed</a> languages such as <a href="C_(programming_language)" title="C (programming language)">C</a> and <a href="C%2B%2B" title="C++">C++</a>.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> In contrast to those languages, Java compiles by default to a <a href="Java_Virtual_Machine" class="mw-redirect" title="Java Virtual Machine">Java Virtual Machine</a> (JVM) with operations distinct from those of the actual computer hardware. Early JVM implementations were <a href="Interpreter_(computing)" title="Interpreter (computing)">interpreters</a>; they simulated the virtual operations one-by-one rather than translating them into <a href="Machine_code" title="Machine code">machine code</a> for direct hardware execution.
</p><p>Since the late 1990s, the execution speed of Java programs improved significantly via introduction of <a href="Just-in-time_compilation" title="Just-in-time compilation">just-in-time compilation</a> (JIT) (in 1997 for <a href="Java_version_history" title="Java version history">Java 1.1</a>),<sup id="cite_ref-Symantec_2-0" class="reference"><a href="#cite_note-Symantec-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-cnet1998_3-0" class="reference"><a href="#cite_note-cnet1998-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup> the addition of language features supporting better code analysis, and optimizations in the JVM (such as <a href="HotSpot_(virtual_machine)" title="HotSpot (virtual machine)">HotSpot</a> becoming the default for <a href="Sun_Microsystems" title="Sun Microsystems">Sun</a>'s JVM in 2000). Sophisticated <a href="Garbage_collection_(computer_science)" title="Garbage collection (computer science)">garbage collection</a> strategies were also an area of improvement. Hardware execution of Java bytecode, such as that offered by ARM's <a href="Jazelle" title="Jazelle">Jazelle</a>, was explored but not deployed.
</p><p>The <a href="Computer_performance" title="Computer performance">performance</a> of a <a href="Java_bytecode" title="Java bytecode">Java bytecode</a> compiled Java program depends on how optimally its given tasks are managed by the host <a href="Java_virtual_machine" title="Java virtual machine">Java virtual machine</a> (JVM), and how well the JVM exploits the features of the <a href="Computer_hardware" title="Computer hardware">computer hardware</a> and <a href="Operating_system" title="Operating system">operating system</a> (OS) in doing so. Thus, any Java <a href="Software_performance_testing" title="Software performance testing">performance test</a> or comparison has to always report the version, vendor, OS and hardware architecture of the used JVM. In a similar manner, the performance of the equivalent natively compiled program will depend on the quality of its generated machine code, so the test or comparison also has to report the name, version and vendor of the used compiler, and its activated <a href="Compiler_optimization" class="mw-redirect" title="Compiler optimization">compiler optimization</a> directives.
</p>
<meta property="mw:PageProp/toc">
<div class="mw-heading mw-heading2"><h2 id="Virtual_machine_optimization_methods">Virtual machine optimization methods</h2></div>
<p>Many optimizations have improved the performance of the JVM over time. However, although Java was often the first <a href="Virtual_machine" title="Virtual machine">virtual machine</a> to implement them successfully, they have often been used in other similar platforms as well.
</p>
<div class="mw-heading mw-heading3"><h3 id="Just-in-time_compiling">Just-in-time compiling</h3></div>
<style data-mw-deduplicate="TemplateStyles:r1236090951">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><div role="note" class="hatnote navigation-not-searchable">Further information: <a href="Just-in-time_compilation" title="Just-in-time compilation">Just-in-time compilation</a> and <a href="HotSpot_(virtual_machine)" title="HotSpot (virtual machine)">HotSpot (virtual machine)</a></div>
<p>Early JVMs always interpreted <a href="Java_bytecode" title="Java bytecode">Java bytecodes</a>. This had a large performance penalty of between a factor 10 and 20 for Java versus C in average applications.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> To combat this, a just-in-time (JIT) compiler was introduced into Java 1.1. Due to the high cost of compiling, an added system called <a href="HotSpot_(virtual_machine)" title="HotSpot (virtual machine)">HotSpot</a> was introduced in Java 1.2 and was made the default in Java 1.3. Using this framework, the <a href="Java_virtual_machine" title="Java virtual machine">Java virtual machine</a> continually analyses program performance for <i>hot spots</i> which are executed frequently or repeatedly. These are then targeted for <a href="Optimization_(computer_science)" class="mw-redirect" title="Optimization (computer science)">optimizing</a>, leading to high performance execution with a minimum of <a href="Overhead_(computing)" title="Overhead (computing)">overhead</a> for less performance-critical code.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup>
Some benchmarks show a 10-fold speed gain by this means.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup> However, due to time constraints, the compiler cannot fully optimize the program, and thus the resulting program is slower than native code alternatives.<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Adaptive_optimizing">Adaptive optimizing</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Further information: <a href="Adaptive_optimization" title="Adaptive optimization">Adaptive optimization</a></div>
<p>Adaptive optimizing is a method in computer science that performs <a href="Dynamic_recompilation" title="Dynamic recompilation">dynamic recompilation</a> of parts of a program based on the current execution profile. With a simple implementation, an adaptive optimizer may simply make a trade-off between just-in-time compiling and interpreting instructions. At another level, adaptive optimizing may exploit local data conditions to optimize away branches and use inline expansion.
</p><p>A <a href="Java_virtual_machine" title="Java virtual machine">Java virtual machine</a> like <a href="HotSpot_(virtual_machine)" title="HotSpot (virtual machine)">HotSpot</a> can also <a href="Deoptimization" class="mw-redirect" title="Deoptimization">deoptimize</a> code formerly JITed. This allows performing aggressive (and potentially unsafe) optimizations, while still being able to later deoptimize the code and fall back to a safe path.<sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Garbage_collection">Garbage collection</h3></div>
<div role="note" class="hatnote navigation-not-searchable">Further information: <a href="Garbage_collection_(computer_science)" title="Garbage collection (computer science)">Garbage collection (computer science)</a></div>
<p>The 1.0 and 1.1 <a href="Java_virtual_machine" title="Java virtual machine">Java virtual machines</a> (JVMs) used a <a href="Tracing_garbage_collection#Copying_vs._mark-and-sweep_vs._mark-and-don't-sweep" title="Tracing garbage collection">mark-sweep collector</a>, which could fragment the <a href="Dynamic_memory_allocation" class="mw-redirect" title="Dynamic memory allocation">heap</a> after a garbage collection.
Starting with Java 1.2, the JVMs changed to a <a href="Tracing_garbage_collection#Generational_GC_(ephemeral_GC)" title="Tracing garbage collection">generational collector</a>, which has a much better defragmentation behaviour.<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup>
Modern JVMs use a variety of methods that have further improved <a href="Garbage_collection_(computer_science)" title="Garbage collection (computer science)">garbage collection</a> performance.<sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Other_optimizing_methods">Other optimizing methods</h3></div>
<div class="mw-heading mw-heading4"><h4 id="Compressed_Oops">Compressed Oops</h4></div>
<p>Compressed Oops allow Java 5.0+ to address up to 32 GB of heap with 32-bit references. Java does not support access to individual bytes, only objects which are 8-byte aligned by default. Because of this, the lowest 3 bits of a heap reference will always be 0. By lowering the resolution of 32-bit references to 8 byte blocks, the addressable space can be increased to 32 GB. This significantly reduces memory use compared to using 64-bit references as Java uses references much more than some languages like C++. Java 8 supports larger alignments such as 16-byte alignment to support up to 64 GB with 32-bit references.
</p>
<div class="mw-heading mw-heading4"><h4 id="Split_bytecode_verification">Split bytecode verification</h4></div>
<p>Before executing a <a href="Class_(computer_science)" class="mw-redirect" title="Class (computer science)">class</a>, the Sun JVM verifies its <a href="Java_bytecode" title="Java bytecode">Java bytecodes</a> (see <a href="Java_virtual_machine#Bytecode_verifier" title="Java virtual machine">bytecode verifier</a>). This verification is performed lazily: classes' bytecodes are only loaded and verified when the specific class is loaded and prepared for use, and not at the beginning of the program. However, as the Java <a href="Java_Platform" class="mw-redirect" title="Java Platform">class libraries</a> are also regular Java classes, they must also be loaded when they are used, which means that the start-up time of a Java program is often longer than for <a href="C%2B%2B" title="C++">C++</a> programs, for example.
</p><p>A method named <i>split-time verification</i>, first introduced in the <a href="Java_Platform%2C_Micro_Edition" title="Java Platform, Micro Edition">Java Platform, Micro Edition</a> (J2ME), is used in the JVM since <a href="Java_version_history" title="Java version history">Java version 6</a>. It splits the verification of <a href="Java_bytecode" title="Java bytecode">Java bytecode</a> in two phases:<sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li>Design-time – when compiling a class from source to bytecode</li>
<li>Runtime – when loading a class.</li></ul>
<p>In practice this method works by capturing knowledge that the Java compiler has of class flow and annotating the compiled method bytecodes with a synopsis of the class flow information. This does not make <a href="Runtime_verification" title="Runtime verification">runtime verification</a> appreciably less complex, but does allow some shortcuts.
</p>
<div class="mw-heading mw-heading4"><h4 id="Escape_analysis_and_lock_coarsening">Escape analysis and lock coarsening</h4></div>
<div role="note" class="hatnote navigation-not-searchable">Further information: <a href="Lock_(computer_science)" title="Lock (computer science)">Lock (computer science)</a> and <a href="Escape_analysis" title="Escape analysis">Escape analysis</a></div>
<p>Java is able to manage <a href="Thread_(computer_science)" class="mw-redirect" title="Thread (computer science)">multithreading</a> at the language level. Multithreading allows programs to perform multiple processes concurrently, thus improving the performance for programs running on <a href="Computer_system" class="mw-redirect" title="Computer system">computer systems</a> with multiple processors or cores. Also, a multithreaded application can remain responsive to input, even while performing long running tasks.
</p><p>However, programs that use multithreading need to take extra care of <a href="Object_(computer_science)" title="Object (computer science)">objects</a> shared between threads, locking access to shared <a href="Method_(computer_science)" class="mw-redirect" title="Method (computer science)">methods</a> or <a href="Block_(programming)" title="Block (programming)">blocks</a> when they are used by one of the threads. Locking a block or an object is a time-consuming operation due to the nature of the underlying <a href="Operating_system" title="Operating system">operating system</a>-level operation involved (see <a href="Concurrency_control" title="Concurrency control">concurrency control</a> and <a href="Lock_(computer_science)#Granularity" title="Lock (computer science)">lock granularity</a>).
</p><p>As the Java library does not know which methods will be used by more than one thread, the standard library always locks <a href="Block_(programming)" title="Block (programming)">blocks</a> when needed in a multithreaded environment.
</p><p>Before Java 6, the virtual machine always <a href="Lock_(computer_science)" title="Lock (computer science)">locked</a> objects and blocks when asked to by the program, even if there was no risk of an object being modified by two different threads at once. For example, in this case, a local <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">Vector</code> was locked before each of the <i>add</i> operations to ensure that it would not be modified by other threads (<code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">Vector</code> is synchronized), but because it is strictly local to the method this is needless:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">getNames</span><span class="p">()</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="n">Vector</span><span class="o"><</span><span class="n">String</span><span class="o">></span><span class="w"> </span><span class="n">v</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Vector</span><span class="o"><></span><span class="p">();</span>
<span class="w"> </span><span class="n">v</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="s">"Me"</span><span class="p">);</span>
<span class="w"> </span><span class="n">v</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="s">"You"</span><span class="p">);</span>
<span class="w"> </span><span class="n">v</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="s">"Her"</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">v</span><span class="p">.</span><span class="na">toString</span><span class="p">();</span>
<span class="p">}</span>
</pre></div>
<p>Starting with Java 6, code blocks and objects are locked only when needed,<sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup> so in the above case, the virtual machine would not lock the Vector object at all.
</p><p>Since version 6u23, Java includes support for escape analysis.<sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading4"><h4 id="Register_allocation_improvements">Register allocation improvements</h4></div>
<p>Before <a href="Java_version_history" title="Java version history">Java 6</a>, <a href="Register_allocation" title="Register allocation">allocation of registers</a> was very primitive in the <i>client</i> virtual machine (they did not live across <a href="Block_(programming)" title="Block (programming)">blocks</a>), which was a problem in <a href="CPU_design" class="mw-redirect" title="CPU design">CPU designs</a> which had fewer <a href="Processor_register" title="Processor register">processor registers</a> available, as in <a href="X86" title="X86">x86s</a>. If there are no more registers available for an operation, the compiler must <a href="Register_spilling" class="mw-redirect" title="Register spilling">copy from register to memory</a> (or memory to register), which takes time (registers are significantly faster to access). However, the <i>server</i> virtual machine used a <a href="Graph_coloring" title="Graph coloring">color-graph</a> allocator and did not have this problem.
</p><p>An optimization of register allocation was introduced in Sun's JDK 6;<sup id="cite_ref-18" class="reference"><a href="#cite_note-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup> it was then possible to use the same registers across blocks (when applicable), reducing accesses to the memory. This led to a reported performance gain of about 60% in some benchmarks.<sup id="cite_ref-19" class="reference"><a href="#cite_note-19"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading4"><h4 id="Class_data_sharing">Class data sharing</h4></div>
<p>Class data sharing (called CDS by Sun) is a mechanism which reduces the startup time for Java applications, and also reduces <a href="Memory_footprint" title="Memory footprint">memory footprint</a>. When the <a href="Java_Runtime_Environment" class="mw-redirect" title="Java Runtime Environment">JRE</a> is installed, the installer loads a set of classes from the system <a href="JAR_(file_format)" title="JAR (file format)">JAR</a> file (the JAR file holding all the Java class library, called rt.jar) into a private internal representation, and dumps that representation to a file, called a "shared archive". During subsequent JVM invocations, this shared archive is <a href="Memory-mapped_file" title="Memory-mapped file">memory-mapped</a> in, saving the cost of loading those classes and allowing much of the JVM's <a href="Metadata#Program_metadata" title="Metadata">metadata</a> for these classes to be shared among multiple JVM processes.<sup id="cite_ref-20" class="reference"><a href="#cite_note-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup>
</p><p>The corresponding improvement in start-up time is more obvious for small programs.<sup id="cite_ref-21" class="reference"><a href="#cite_note-21"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading2"><h2 id="History_of_performance_improvements">History of performance improvements</h2></div>
<div role="note" class="hatnote navigation-not-searchable">Further information: <a href="Java_version_history" title="Java version history">Java version history</a></div>
<p>Apart from the improvements listed here, each release of Java introduced many performance improvements in the JVM and Java <a href="Application_programming_interface" class="mw-redirect" title="Application programming interface">application programming interface</a> (API).
</p><p>JDK 1.1.6: First <a href="Just-in-time_compilation" title="Just-in-time compilation">just-in-time compilation</a> (<a href="NortonLifeLock" class="mw-redirect" title="NortonLifeLock">Symantec</a>'s JIT-compiler)<sup id="cite_ref-Symantec_2-1" class="reference"><a href="#cite_note-Symantec-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-symantec_compiler_22-0" class="reference"><a href="#cite_note-symantec_compiler-22"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup>
</p><p>J2SE 1.2: Use of a <a href="Garbage_collection_(computer_science)#Generational_GC_(aka_Ephemeral_GC)" title="Garbage collection (computer science)">generational collector</a>.
</p><p>J2SE 1.3: <a href="#Just-in-time_compiling">Just-in-time compiling</a> by <a href="HotSpot_(virtual_machine)" title="HotSpot (virtual machine)">HotSpot</a>.
</p><p>J2SE 1.4: See <a rel="nofollow" class="external text" href="http://java.sun.com/j2se/1.4.2/performance.guide.html">here</a>, for a Sun overview of performance improvements between 1.3 and 1.4 versions.
</p><p>Java SE 5.0: <a href="#Class_data_sharing">Class data sharing</a><sup id="cite_ref-23" class="reference"><a href="#cite_note-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup>
</p><p>Java SE 6:
</p>
<ul><li><a href="#Split_bytecode_verification">Split bytecode verification</a></li>
<li><a href="#Escape_analysis_and_lock_coarsening">Escape analysis and lock coarsening</a></li>
<li><a href="#Register_allocation_improvements">Register allocation improvements</a></li></ul>
<p>Other improvements:
</p>
<ul><li>Java <a href="OpenGL" title="OpenGL">OpenGL</a> <a href="Java_2D" title="Java 2D">Java 2D</a> pipeline speed improvements<sup id="cite_ref-24" class="reference"><a href="#cite_note-24"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup></li>
<li>Java 2D performance also improved significantly in Java 6<sup id="cite_ref-25" class="reference"><a href="#cite_note-25"><span class="cite-bracket">[</span>25<span class="cite-bracket">]</span></a></sup></li></ul>
<p>See also 'Sun overview of performance improvements between Java 5 and Java 6'.<sup id="cite_ref-26" class="reference"><a href="#cite_note-26"><span class="cite-bracket">[</span>26<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Java_SE_6_Update_10">Java SE 6 Update 10</h3></div>
<ul><li>Java Quick Starter reduces application start-up time by preloading part of JRE data at OS startup on <a href="Page_cache" title="Page cache">disk cache</a>.<sup id="cite_ref-jrecache_27-0" class="reference"><a href="#cite_note-jrecache-27"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup></li>
<li>Parts of the platform needed to execute an application accessed from the web when JRE is not installed are now downloaded first. The full JRE is 12 MB, a typical Swing application only needs to download 4 MB to start. The remaining parts are then downloaded in the background.<sup id="cite_ref-28" class="reference"><a href="#cite_note-28"><span class="cite-bracket">[</span>28<span class="cite-bracket">]</span></a></sup></li>
<li>Graphics performance on <a href="Microsoft_Windows" title="Microsoft Windows">Windows</a> improved by extensively using <a href="Direct3D" title="Direct3D">Direct3D</a> by default,<sup id="cite_ref-29" class="reference"><a href="#cite_note-29"><span class="cite-bracket">[</span>29<span class="cite-bracket">]</span></a></sup> and use <a href="Shader" title="Shader">shaders</a> on <a href="Graphics_processing_unit" title="Graphics processing unit">graphics processing unit</a> (GPU) to accelerate complex <a href="Java_2D" title="Java 2D">Java 2D</a> operations.<sup id="cite_ref-30" class="reference"><a href="#cite_note-30"><span class="cite-bracket">[</span>30<span class="cite-bracket">]</span></a></sup></li></ul>
<div class="mw-heading mw-heading3"><h3 id="Java_7">Java 7</h3></div>
<p>Several performance improvements have been released for Java 7:
Future performance improvements are planned for an update of Java 6 or Java 7:<sup id="cite_ref-31" class="reference"><a href="#cite_note-31"><span class="cite-bracket">[</span>31<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li>Provide JVM support for <a href="Dynamic_programming_language" title="Dynamic programming language">dynamic programming languages</a>, following the prototyping work currently done on the <a href="Da_Vinci_Machine" title="Da Vinci Machine">Da Vinci Machine</a> (Multi Language Virtual Machine),<sup id="cite_ref-32" class="reference"><a href="#cite_note-32"><span class="cite-bracket">[</span>32<span class="cite-bracket">]</span></a></sup></li>
<li>Enhance the existing concurrency library by managing <a href="Parallel_computing" title="Parallel computing">parallel computing</a> on <a href="Multi-core" class="mw-redirect" title="Multi-core">multi-core</a> processors,<sup id="cite_ref-33" class="reference"><a href="#cite_note-33"><span class="cite-bracket">[</span>33<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-34" class="reference"><a href="#cite_note-34"><span class="cite-bracket">[</span>34<span class="cite-bracket">]</span></a></sup></li>
<li>Allow the JVM to use both the <i><a href="HotSpot_(virtual_machine)#Features" title="HotSpot (virtual machine)">client</a></i> and <i>server</i> <a href="Just-in-time_compilation" title="Just-in-time compilation">JIT compilers</a> in the same session with a method called tiered compiling:<sup id="cite_ref-35" class="reference"><a href="#cite_note-35"><span class="cite-bracket">[</span>35<span class="cite-bracket">]</span></a></sup>
<ul><li>The <i>client</i> would be used at startup (because it is good at startup and for small applications),</li>
<li>The <i>server</i> would be used for long-term running of the application (because it outperforms the <i>client</i> compiler for this).</li></ul></li>
<li>Replace the existing concurrent low-pause garbage collector (also called concurrent mark-sweep (CMS) collector) by a new collector called Garbage First (G1) to ensure consistent pauses over time.<sup id="cite_ref-36" class="reference"><a href="#cite_note-36"><span class="cite-bracket">[</span>36<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-37" class="reference"><a href="#cite_note-37"><span class="cite-bracket">[</span>37<span class="cite-bracket">]</span></a></sup></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Comparison_to_other_languages">Comparison to other languages</h2></div>
<p>Objectively comparing the performance of a Java program and an equivalent one written in another language such as <a href="C%2B%2B" title="C++">C++</a> needs a carefully and thoughtfully constructed benchmark which compares programs completing identical tasks. The target <a href="Platform_(computing)" class="mw-redirect" title="Platform (computing)">platform</a> of Java's <a href="Bytecode" title="Bytecode">bytecode</a> compiler is the <a href="Java_platform" class="mw-redirect" title="Java platform">Java platform</a>, and the bytecode is either interpreted or compiled into machine code by the JVM. Other compilers almost always target a specific hardware and software platform, producing machine code that will stay virtually unchanged during execution. Very different and hard-to-compare scenarios arise from these two different approaches: static vs. <a href="Dynamic_compilation" title="Dynamic compilation">dynamic compilations</a> and <a href="Dynamic_recompilation" title="Dynamic recompilation">recompilations</a>, the availability of precise information about the runtime environment and others.
</p><p>Java is often <a href="Just-in-time_compilation" title="Just-in-time compilation">compiled just-in-time</a> at runtime by the Java <a href="Virtual_machine" title="Virtual machine">virtual machine</a>, but may also be <a href="Ahead-of-time_compilation" title="Ahead-of-time compilation">compiled ahead-of-time</a>, as is C++. When compiled just-in-time, the micro-benchmarks of <a href="The_Computer_Language_Benchmarks_Game" title="The Computer Language Benchmarks Game">The Computer Language Benchmarks Game</a> indicate the following about its performance:<sup id="cite_ref-38" class="reference"><a href="#cite_note-38"><span class="cite-bracket">[</span>38<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li>slower than compiled languages such as <a href="C_(programming_language)" title="C (programming language)">C</a> or <a href="C%2B%2B" title="C++">C++</a>,<sup id="cite_ref-39" class="reference"><a href="#cite_note-39"><span class="cite-bracket">[</span>39<span class="cite-bracket">]</span></a></sup></li>
<li>similar to other just-in-time compiled languages such as <a href="C_Sharp_(programming_language)" title="C Sharp (programming language)">C#</a>,<sup id="cite_ref-40" class="reference"><a href="#cite_note-40"><span class="cite-bracket">[</span>40<span class="cite-bracket">]</span></a></sup></li>
<li>much faster than languages without an effective native-code compiler (<a href="Just-in-time_compilation" title="Just-in-time compilation">JIT</a> or <a href="Ahead-of-time_compilation" title="Ahead-of-time compilation">AOT</a>), such as <a href="Perl" title="Perl">Perl</a>, <a href="Ruby_(programming_language)" title="Ruby (programming language)">Ruby</a>, <a href="PHP" title="PHP">PHP</a> and <a href="Python_(programming_language)" title="Python (programming language)">Python</a>.<sup id="cite_ref-41" class="reference"><a href="#cite_note-41"><span class="cite-bracket">[</span>41<span class="cite-bracket">]</span></a></sup></li></ul>
<div class="mw-heading mw-heading3"><h3 id="Program_speed">Program speed</h3></div>
<p>Benchmarks often measure performance for small numerically intensive programs. In some rare real-life programs, Java out-performs C. One example is the benchmark of <a href="Jake2" title="Jake2">Jake2</a> (a clone of <a href="Quake_II" title="Quake II">Quake II</a> written in Java by translating the original <a href="GPL" class="mw-redirect" title="GPL">GPL</a> C code). The Java 5.0 version performs better in some hardware configurations than its C counterpart.<sup id="cite_ref-42" class="reference"><a href="#cite_note-42"><span class="cite-bracket">[</span>42<span class="cite-bracket">]</span></a></sup> While it is not specified how the data was measured (for example if the original Quake II executable compiled in 1997 was used, which may be considered bad as current C compilers may achieve better optimizations for Quake), it notes how the same Java source code can have a huge speed boost just by updating the VM, something impossible to achieve with a 100% static approach.
</p><p>For other programs, the C++ counterpart can, and usually does, run significantly faster than the Java equivalent. A benchmark performed by Google in 2011 showed a factor 10 between C++ and Java.<sup id="cite_ref-43" class="reference"><a href="#cite_note-43"><span class="cite-bracket">[</span>43<span class="cite-bracket">]</span></a></sup> At the other extreme, an academic benchmark performed in 2012 with a 3D modelling algorithm showed the <a href="Java_6" class="mw-redirect" title="Java 6">Java 6</a> JVM being from 1.09 to 1.91 times slower than C++ under Windows.<sup id="cite_ref-44" class="reference"><a href="#cite_note-44"><span class="cite-bracket">[</span>44<span class="cite-bracket">]</span></a></sup>
</p><p>Some optimizations that are possible in Java and similar languages may not be possible in certain circumstances in C++:<sup id="cite_ref-idiom_45-0" class="reference"><a href="#cite_note-idiom-45"><span class="cite-bracket">[</span>45<span class="cite-bracket">]</span></a></sup>
</p>
<ul><li>C-style <a href="Pointer_(computer_programming)" title="Pointer (computer programming)">pointer</a> use can hinder optimizing in languages that support pointers,</li>
<li>The use of <a href="#Escape_analysis_and_lock_coarsening">escape analysis</a> methods is limited in <a href="C%2B%2B" title="C++">C++</a>, for example, because a C++ compiler does not always know if an <a href="Object_(computer_science)" title="Object (computer science)">object</a> will be modified in a given block of code due to <a href="Pointer_(computer_programming)" title="Pointer (computer programming)">pointers</a>,<sup id="cite_ref-46" class="reference"><a href="#cite_note-46"><span class="cite-bracket">[</span>note 1<span class="cite-bracket">]</span></a></sup></li>
<li>Java can access derived instance methods faster than C++ can access derived virtual methods due to C++'s extra virtual-table look-up. However, non-virtual methods in C++ do not suffer from v-table performance bottlenecks, and thus exhibit performance similar to Java.</li></ul>
<p>The JVM is also able to perform processor specific optimizations or <a href="Inline_expansion" title="Inline expansion">inline expansion</a>. And, the ability to deoptimize code already compiled or inlined sometimes allows it to perform more aggressive optimizations than those performed by statically typed languages when external library functions are involved.<sup id="cite_ref-47" class="reference"><a href="#cite_note-47"><span class="cite-bracket">[</span>46<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-48" class="reference"><a href="#cite_note-48"><span class="cite-bracket">[</span>47<span class="cite-bracket">]</span></a></sup>
</p><p>Results for <a href="Benchmark_(computing)" title="Benchmark (computing)">microbenchmarks</a> between Java and C++ highly depend on which operations are compared. For example, when comparing with Java 5.0:
</p>
<ul><li>32- and 64-bit arithmetic operations,<sup id="cite_ref-49" class="reference"><a href="#cite_note-49"><span class="cite-bracket">[</span>48<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-50" class="reference"><a href="#cite_note-50"><span class="cite-bracket">[</span>49<span class="cite-bracket">]</span></a></sup> <a href="Input/output" title="Input/output">file input/output</a>, <sup id="cite_ref-51" class="reference"><a href="#cite_note-51"><span class="cite-bracket">[</span>50<span class="cite-bracket">]</span></a></sup> and <a href="Exception_handling" title="Exception handling">exception handling</a><sup id="cite_ref-52" class="reference"><a href="#cite_note-52"><span class="cite-bracket">[</span>51<span class="cite-bracket">]</span></a></sup> have a similar performance to comparable C++ programs</li>
<li>Operations on <a href="Array_data_type" class="mw-redirect" title="Array data type">arrays</a><sup id="cite_ref-53" class="reference"><a href="#cite_note-53"><span class="cite-bracket">[</span>52<span class="cite-bracket">]</span></a></sup> have better performance in C.</li>
<li>The performance of <a href="Trigonometric_functions" title="Trigonometric functions">trigonometric functions</a> is much better in C.<sup id="cite_ref-54" class="reference"><a href="#cite_note-54"><span class="cite-bracket">[</span>53<span class="cite-bracket">]</span></a></sup></li></ul>
<hr>
<dl><dt>Notes</dt></dl>
<style data-mw-deduplicate="TemplateStyles:r1239543626">
/* start https://en.wikipedia.org/ */
.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}
/* end https://en.wikipedia.org/ */
</style><div class="reflist">
<div class="mw-references-wrap"><ol class="references">
<li id="cite_note-46"><span class="mw-cite-backlink"><b><a href="#cite_ref-46">^</a></b></span> <span class="reference-text">Contention of this nature can be alleviated in C++ programs at the source code level by employing advanced methods such as custom <a href="Allocator_(C%2B%2B)" title="Allocator (C++)">allocators</a>, exploiting precisely the kind of low-level coding complexity that Java was designed to conceal and encapsulate; however, this approach is rarely practical if not adopted (or at least anticipated) while the program remains under primary development.</span>
</li>
</ol></div></div>
<div class="mw-heading mw-heading3"><h3 id="Multi-core_performance">Multi-core performance</h3></div>
<p>The scalability and performance of Java applications on multi-core systems is limited by the object allocation rate. This effect is sometimes called an "allocation wall".<sup id="cite_ref-55" class="reference"><a href="#cite_note-55"><span class="cite-bracket">[</span>54<span class="cite-bracket">]</span></a></sup> However, in practice, modern garbage collector algorithms use multiple cores to perform garbage collection, which to some degree alleviates this problem. Some garbage collectors are reported to sustain allocation rates of over a gigabyte per second,<sup id="cite_ref-56" class="reference"><a href="#cite_note-56"><span class="cite-bracket">[</span>55<span class="cite-bracket">]</span></a></sup> and there exist Java-based systems that have no problems scaling to several hundreds of CPU cores and heaps sized several hundreds of GB.<sup id="cite_ref-57" class="reference"><a href="#cite_note-57"><span class="cite-bracket">[</span>56<span class="cite-bracket">]</span></a></sup>
</p><p>Automatic memory management in Java allows for efficient use of lockless and immutable data structures that are extremely hard or sometimes impossible to implement without some kind of a garbage collection. Java offers a number of such high-level structures in its standard library in the java.util.concurrent package, while many languages historically used for high performance systems like C or C++ are still lacking them.
</p>
<div class="mw-heading mw-heading3"><h3 id="Startup_time">Startup time</h3></div>
<p>Java startup time is often much slower than many languages, including <a href="C_(programming_language)" title="C (programming language)">C</a>, <a href="C%2B%2B" title="C++">C++</a>, <a href="Perl" title="Perl">Perl</a> or <a href="Python_(programming_language)" title="Python (programming language)">Python</a>, because many classes (and first of all classes from the <a href="Java_(software_platform)#Class_libraries" title="Java (software platform)">platform Class libraries</a>) must be loaded before being used.
</p><p>When compared against similar popular runtimes, for small programs running on a Windows machine, the startup time appears to be similar to <a href="Mono_(software)" title="Mono (software)">Mono's</a> and a little slower than <a href=".NET_Framework" title=".NET Framework">.NET's</a>.<sup id="cite_ref-58" class="reference"><a href="#cite_note-58"><span class="cite-bracket">[</span>57<span class="cite-bracket">]</span></a></sup>
</p><p>It seems that much of the startup time is due to input-output (IO) bound operations rather than JVM initialization or class loading (the <i>rt.jar</i> class data file alone is 40 MB and the JVM must seek much data in this big file).<sup id="cite_ref-jrecache_27-1" class="reference"><a href="#cite_note-jrecache-27"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup> Some tests showed that although the new <a href="#Split_bytecode_verification">split bytecode verification</a> method improved class loading by roughly 40%, it only realized about 5% startup
improvement for large programs.<sup id="cite_ref-59" class="reference"><a href="#cite_note-59"><span class="cite-bracket">[</span>58<span class="cite-bracket">]</span></a></sup>
</p><p>Albeit a small improvement, it is more visible in small programs that perform a simple operation and then exit, because the Java platform data loading can represent many times the load of the actual program's operation.
</p><p>Starting with Java SE 6 Update 10, the Sun JRE comes with a Quick Starter that preloads class data at OS startup to get data from the <a href="Page_cache" title="Page cache">disk cache</a> rather than from the disk.
</p><p><a href="Excelsior_JET" title="Excelsior JET">Excelsior JET</a> approaches the problem from the other side. Its Startup Optimizer reduces the amount of data that must be read from the disk on application startup, and makes the reads more sequential.
</p><p>In November 2004, Nailgun, a "client, protocol, and server for running Java programs from the command line without incurring the JVM startup overhead" was publicly released.<sup id="cite_ref-60" class="reference"><a href="#cite_note-60"><span class="cite-bracket">[</span>59<span class="cite-bracket">]</span></a></sup> introducing for the first time an option for <a href="Script_(computing)" class="mw-redirect" title="Script (computing)">scripts</a> to use a JVM as a <a href="Daemon_(computing)" title="Daemon (computing)">daemon</a>, for running one or more Java applications with no JVM startup overhead. The Nailgun daemon is insecure: "all programs are run with the same permissions as the server". Where <a href="Multi-user" class="mw-redirect" title="Multi-user">multi-user</a> security is needed, Nailgun is inappropriate without special precautions. Scripts where per-application JVM startup dominates resource use, see one to two <a href="Order_of_magnitude" title="Order of magnitude">order of magnitude</a> runtime performance improvements.<sup id="cite_ref-61" class="reference"><a href="#cite_note-61"><span class="cite-bracket">[</span>60<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Memory_use">Memory use</h3></div>
<p>Java memory use is much higher than C++'s memory use because:
</p>
<ul><li>There is an overhead of 8 bytes for each object and 12 bytes for each array<sup id="cite_ref-62" class="reference"><a href="#cite_note-62"><span class="cite-bracket">[</span>61<span class="cite-bracket">]</span></a></sup> in Java. If the size of an object is not a multiple of 8 bytes, it is rounded up to next multiple of 8. This means an object holding one byte field occupies 16 bytes and needs a 4-byte reference. C++ also allocates a <a href="Pointer_(computer_programming)" title="Pointer (computer programming)">pointer</a> (usually 4 or 8 bytes) for every object which class directly or indirectly declares <a href="Virtual_function" title="Virtual function">virtual functions</a>.<sup id="cite_ref-63" class="reference"><a href="#cite_note-63"><span class="cite-bracket">[</span>62<span class="cite-bracket">]</span></a></sup></li>
<li>Lack of address arithmetic makes creating memory-efficient containers, such as tightly spaced structures and <a href="XOR_linked_list" title="XOR linked list">XOR linked lists</a>, currently impossible (<a href="Project_Valhalla_(Java_language)" title="Project Valhalla (Java language)">the OpenJDK Valhalla project</a> aims to mitigate these issues, though it does not aim to introduce pointer arithmetic; this cannot be done in a garbage collected environment).</li>
<li>Contrary to malloc and new, the average performance overhead of garbage collection asymptotically nears zero (more accurately, one CPU cycle) as the heap size increases.<sup id="cite_ref-64" class="reference"><a href="#cite_note-64"><span class="cite-bracket">[</span>63<span class="cite-bracket">]</span></a></sup></li>
<li>Parts of the <a href="Java_Class_Library" title="Java Class Library">Java Class Library</a> must load before program execution (at least the classes used within a program).<sup id="cite_ref-65" class="reference"><a href="#cite_note-65"><span class="cite-bracket">[</span>64<span class="cite-bracket">]</span></a></sup> This leads to a significant memory overhead for small applications.</li>
<li>Both the Java binary and native recompilations will typically be in memory.</li>
<li>The virtual machine uses substantial memory.</li>
<li>In Java, a composite object (class A which uses instances of B and C) is created using references to allocated instances of B and C. In C++ the memory and performance cost of these types of references can be avoided when the instance of B and/or C exists within A.</li></ul>
<p>In most cases a C++ application will consume less memory than an equivalent Java application due to the large overhead of Java's virtual machine, class loading and automatic memory resizing. For programs in which memory is a critical factor for choosing between languages and runtime environments, a cost/benefit analysis is needed.
</p>
<div class="mw-heading mw-heading3"><h3 id="Trigonometric_functions">Trigonometric functions</h3></div>
<p>Performance of trigonometric functions is bad compared to C, because Java has strict specifications for the results of mathematical operations, which may not correspond to the underlying hardware implementation.<sup id="cite_ref-66" class="reference"><a href="#cite_note-66"><span class="cite-bracket">[</span>65<span class="cite-bracket">]</span></a></sup> On the <a href="X87" title="X87">x87</a> floating point subset, Java since 1.4 does argument reduction for sin and cos in software,<sup id="cite_ref-67" class="reference"><a href="#cite_note-67"><span class="cite-bracket">[</span>66<span class="cite-bracket">]</span></a></sup> causing a big performance hit for values outside the range.<sup id="cite_ref-68" class="reference"><a href="#cite_note-68"><span class="cite-bracket">[</span>67<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="Java_Native_Interface">Java Native Interface</h3></div>
<p>The <a href="Java_Native_Interface" title="Java Native Interface">Java Native Interface</a> invokes a high overhead, making it costly to cross the boundary between code running on the JVM and native code.<sup id="cite_ref-69" class="reference"><a href="#cite_note-69"><span class="cite-bracket">[</span>68<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-70" class="reference"><a href="#cite_note-70"><span class="cite-bracket">[</span>69<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-FOOTNOTEBloch2018285Chapter_§11_Item_66:_Use_native_methods_judiciously_71-0" class="reference"><a href="#cite_note-FOOTNOTEBloch2018285Chapter_§11_Item_66:_Use_native_methods_judiciously-71"><span class="cite-bracket">[</span>70<span class="cite-bracket">]</span></a></sup> <a href="Java_Native_Access" title="Java Native Access">Java Native Access</a> (JNA) provides <a href="Java_(programming_language)" title="Java (programming language)">Java</a> programs easy access to native <a href="Shared_library" title="Shared library">shared libraries</a> (<a href="Dynamic-link_library" title="Dynamic-link library">dynamic-link library</a> (DLLs) on Windows) via Java code only, with no JNI or native code. This functionality is comparable to Windows' Platform/Invoke and <a href="Python_(programming_language)" title="Python (programming language)">Python's</a> ctypes. Access is dynamic at runtime without code generation. But it has a cost, and JNA is usually slower than JNI.<sup id="cite_ref-72" class="reference"><a href="#cite_note-72"><span class="cite-bracket">[</span>71<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="User_interface">User interface</h3></div>
<p><a href="Swing_(Java)" title="Swing (Java)">Swing</a> has been perceived as slower than native <a href="Widget_toolkit" title="Widget toolkit">widget toolkits</a>, because it delegates the rendering of widgets to the pure <a href="Java_2D" title="Java 2D">Java 2D</a> <a href="API" title="API">API</a>. However, benchmarks comparing the performance of Swing versus the <a href="Standard_Widget_Toolkit" title="Standard Widget Toolkit">Standard Widget Toolkit</a>, which delegates the rendering to the native GUI libraries of the operating system, show no clear winner, and the results greatly depend on the context and the environments.<sup id="cite_ref-73" class="reference"><a href="#cite_note-73"><span class="cite-bracket">[</span>72<span class="cite-bracket">]</span></a></sup> Additionally, the newer <a href="JavaFX" title="JavaFX">JavaFX</a> framework, intended to replace Swing, addresses many of Swing's inherent issues.
</p>
<div class="mw-heading mw-heading3"><h3 id="Use_for_high_performance_computing">Use for high performance computing</h3></div>
<p>Some people believe that Java performance for <a href="High_performance_computing" class="mw-redirect" title="High performance computing">high performance computing</a> (HPC) is similar to <a href="Fortran" title="Fortran">Fortran</a> on compute-intensive benchmarks, but that JVMs still have scalability issues for performing intensive communication on a <a href="Grid_computing" title="Grid computing">grid computing</a> network.<sup id="cite_ref-74" class="reference"><a href="#cite_note-74"><span class="cite-bracket">[</span>73<span class="cite-bracket">]</span></a></sup>
</p><p>However, high performance computing applications written in Java have won benchmark competitions. In 2008,<sup id="cite_ref-75" class="reference"><a href="#cite_note-75"><span class="cite-bracket">[</span>74<span class="cite-bracket">]</span></a></sup> and 2009,<sup id="cite_ref-76" class="reference"><a href="#cite_note-76"><span class="cite-bracket">[</span>75<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-77" class="reference"><a href="#cite_note-77"><span class="cite-bracket">[</span>76<span class="cite-bracket">]</span></a></sup> an Apache <a href="Hadoop" class="mw-redirect" title="Hadoop">Hadoop</a> (an open-source high performance computing project written in Java) based cluster was able to sort a terabyte and petabyte of integers the fastest. The hardware setup of the competing systems was not fixed, however.<sup id="cite_ref-78" class="reference"><a href="#cite_note-78"><span class="cite-bracket">[</span>77<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-googlemapreduce_79-0" class="reference"><a href="#cite_note-googlemapreduce-79"><span class="cite-bracket">[</span>78<span class="cite-bracket">]</span></a></sup>
</p>
<div class="mw-heading mw-heading3"><h3 id="In_programming_contests">In programming contests</h3></div>
<p>Programs in Java start slower than those in other compiled languages.<sup id="cite_ref-80" class="reference"><a href="#cite_note-80"><span class="cite-bracket">[</span>79<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-81" class="reference"><a href="#cite_note-81"><span class="cite-bracket">[</span>80<span class="cite-bracket">]</span></a></sup> Thus, some online judge systems, notably those hosted by Chinese universities, use longer time limits for Java programs<sup id="cite_ref-82" class="reference"><a href="#cite_note-82"><span class="cite-bracket">[</span>81<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-83" class="reference"><a href="#cite_note-83"><span class="cite-bracket">[</span>82<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-84" class="reference"><a href="#cite_note-84"><span class="cite-bracket">[</span>83<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-85" class="reference"><a href="#cite_note-85"><span class="cite-bracket">[</span>84<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-86" class="reference"><a href="#cite_note-86"><span class="cite-bracket">[</span>85<span class="cite-bracket">]</span></a></sup> to be fair to contestants using Java.
</p>
<div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2></div>
<style data-mw-deduplicate="TemplateStyles:r1266661725">
/* start https://en.wikipedia.org/ */
.mw-parser-output .portalbox{padding:0;margin:0.5em 0;display:table;box-sizing:border-box;max-width:175px;list-style:none}.mw-parser-output .portalborder{border:1px solid var(--border-color-base,#a2a9b1);padding:0.1em;background:var(--background-color-neutral-subtle,#f8f9fa)}.mw-parser-output .portalbox-entry{display:table-row;font-size:85%;line-height:110%;height:1.9em;font-style:italic;font-weight:bold}.mw-parser-output .portalbox-image{display:table-cell;padding:0.2em;vertical-align:middle;text-align:center}.mw-parser-output .portalbox-link{display:table-cell;padding:0.2em 0.2em 0.2em 0.3em;vertical-align:middle}@media(min-width:720px){.mw-parser-output .portalleft{margin:0.5em 1em 0.5em 0}.mw-parser-output .portalright{clear:right;float:right;margin:0.5em 0 0.5em 1em}}
/* end https://en.wikipedia.org/ */
</style>
<ul><li><a href="Common_Language_Runtime" title="Common Language Runtime">Common Language Runtime</a></li>
<li><a href="Profiling_(computer_programming)" title="Profiling (computer programming)">Performance analysis</a></li>
<li><a href="Java_processor" title="Java processor">Java processor</a>, an embedded processor running Java bytecode natively (such as <a href="JStik" title="JStik">JStik</a>)</li>
<li><a href="Comparison_of_Java_and_C%2B%2B" title="Comparison of Java and C++">Comparison of Java and C++</a></li>
<li><a href="Java_ConcurrentMap" title="Java ConcurrentMap">Java ConcurrentMap</a></li></ul>
<div class="mw-heading mw-heading2"><h2 id="Citations">Citations</h2></div>
<div class="reflist reflist-columns references-column-width reflist-columns-2">
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">
/* start https://en.wikipedia.org/ */
.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("./mw/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("./mw/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("./mw/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("./mw/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}
/* end https://en.wikipedia.org/ */
</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.scribblethink.org/Computer/javaCbenchmark.html">"Java versus C++ benchmarks"</a>.</cite></span>
</li>
<li id="cite_note-Symantec-2"><span class="mw-cite-backlink">^ <a href="#cite_ref-Symantec_2-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-Symantec_2-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20100628171748/http://www.symantec.com/about/news/release/article.jsp?prid=19970407_03">"Symantec's Just-In-Time Java Compiler To Be Integrated Into Sun JDK 1.1"</a>. Archived from <a rel="nofollow" class="external text" href="http://www.symantec.com/about/news/release/article.jsp?prid=19970407_03">the original</a> on June 28, 2010.</cite></span>
</li>
<li id="cite_note-cnet1998-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-cnet1998_3-0">^</a></b></span> <span class="reference-text">
<cite class="citation news cs1"><a rel="nofollow" class="external text" href="https://www.cnet.com/news/short-take-apple-licenses-symantecs-just-in-time-compiler/">"Short Take: Apple licenses Symantec's just-in-time compiler"</a>. cnet.com. May 12, 1998<span class="reference-accessdate">. Retrieved <span class="nowrap">November 15,</span> 2015</span>.</cite></span>
</li>
<li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><cite class="citation web cs1 cs1-prop-unfit"><a rel="nofollow" class="external text" href="https://archive.today/20140527181040/http://grnlight.net/index.php/programming-articles/116-java-gets-four-times-faster-with-new-symantec-just-in-time-compiler">"Java gets four times faster with new Symantec just-in-time compiler"</a>. Archived from the original on May 27, 2014.</cite></span>
</li>
<li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.shudo.net/jit/perf/">"Performance Comparison of Java/.NET Runtimes (Oct 2004)"</a>.</cite></span>
</li>
<li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text">
<cite id="CITEREFKawaguchi2008" class="citation web cs1">Kawaguchi, Kohsuke (March 30, 2008). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20080402034758/http://weblogs.java.net/blog/kohsuke/archive/2008/03/deep_dive_into.html">"Deep dive into assembly code from Java"</a>. Archived from <a rel="nofollow" class="external text" href="https://weblogs.java.net/blog/kohsuke/archive/2008/03/deep_dive_into.html">the original</a> on April 2, 2008<span class="reference-accessdate">. Retrieved <span class="nowrap">April 2,</span> 2008</span>.</cite></span>
</li>
<li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://ei.cs.vt.edu/~cs5314/presentations/Group2PLDI.pdf">"Fast, Effective Code Generation in a Just-In-Time Java Compiler"</a> <span class="cs1-format">(PDF)</span>. <a href="Intel_Corporation" class="mw-redirect" title="Intel Corporation">Intel Corporation</a><span class="reference-accessdate">. Retrieved <span class="nowrap">June 22,</span> 2007</span>.</cite></span>
</li>
<li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text">This <a rel="nofollow" class="external text" href="http://www.shudo.net/jit/perf/">article</a> shows that the performance gain between interpreted mode and Hotspot amounts to more than a factor of 10.</span>
</li>
<li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.itu.dk/~sestoft/papers/numericperformance.pdf">Numeric performance in C, C# and Java </a></span>
</li>
<li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.cherrystonesoftware.com/doc/AlgorithmicPerformance.pdf">Algorithmic Performance Comparison Between C, C++, Java and C# Programming Languages</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20100331155325/http://www.cherrystonesoftware.com/doc/AlgorithmicPerformance.pdf">Archived</a> March 31, 2010, at the <a href="Wayback_Machine" title="Wayback Machine">Wayback Machine</a></span>
</li>
<li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://java.sun.com/products/hotspot/docs/whitepaper/Java_Hotspot_v1.4.1/Java_HSpot_WP_v1.4.1_1002_4.html#hotspot">"The Java HotSpot Virtual Machine, v1.4.1"</a>. <a href="Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a><span class="reference-accessdate">. Retrieved <span class="nowrap">April 20,</span> 2008</span>.</cite></span>
</li>
<li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><cite id="CITEREFNutter2008" class="citation web cs1">Nutter, Charles (January 28, 2008). <a rel="nofollow" class="external text" href="http://headius.blogspot.com/2008/01/langnet-2008-day-1-thoughts.html">"Lang.NET 2008: Day 1 Thoughts"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">January 18,</span> 2011</span>. <q><i>Deoptimization is very exciting when dealing with performance concerns, since it means you can make much more aggressive optimizations...knowing you'll be able to fall back on a tried and true safe path later on</i></q></cite></span>
</li>
<li id="cite_note-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-13">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www-128.ibm.com/developerworks/library/j-jtp01274.html">IBM DeveloperWorks Library</a></span>
</li>
<li id="cite_note-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-14">^</a></b></span> <span class="reference-text">For example, the duration of pauses is less noticeable now. See for example this clone of <a href="Quake_II" title="Quake II">Quake II</a> written in Java: <a rel="nofollow" class="external text" href="http://bytonic.de/html/jake2.html">Jake2</a>.</span>
</li>
<li id="cite_note-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-15">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://jdk.dev.java.net/verifier.html">"New Java SE 6 Feature: Type Checking Verifier"</a>. Java.net<span class="reference-accessdate">. Retrieved <span class="nowrap">January 18,</span> 2011</span>.</cite></span>
</li>
<li id="cite_note-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-16">^</a></b></span> <span class="reference-text"><cite id="CITEREFBrian_Goetz2005" class="citation web cs1">Brian Goetz (October 18, 2005). <a rel="nofollow" class="external text" href="http://www-128.ibm.com/developerworks/java/library/j-jtp10185/">"Java theory and practice: Synchronization optimizations in Mustang"</a>. <a href="IBM" title="IBM">IBM</a><span class="reference-accessdate">. Retrieved <span class="nowrap">January 26,</span> 2013</span>.</cite></span>
</li>
<li id="cite_note-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-17">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html#escapeAnalysis">"Java HotSpot Virtual Machine Performance Enhancements"</a>. <a href="Oracle_Corporation" title="Oracle Corporation">Oracle Corporation</a><span class="reference-accessdate">. Retrieved <span class="nowrap">January 14,</span> 2014</span>. <q><i>Escape analysis is a technique by which the Java Hotspot Server Compiler can analyze the scope of a new object's uses and decide whether to allocate it on the Java heap. Escape analysis is supported and enabled by default in Java SE 6u23 and later.</i></q></cite></span>
</li>
<li id="cite_note-18"><span class="mw-cite-backlink"><b><a href="#cite_ref-18">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6320351">Bug report: new register allocator, fixed in Mustang (JDK 6) b59</a></span>
</li>
<li id="cite_note-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-19">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://weblogs.java.net/blog/2005/11/10/mustangs-hotspot-client-gets-58-faster">Mustang's HotSpot Client gets 58% faster!</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20120305215143/http://weblogs.java.net/blog/2005/11/10/mustangs-hotspot-client-gets-58-faster">Archived</a> March 5, 2012, at the <a href="Wayback_Machine" title="Wayback Machine">Wayback Machine</a> in Osvaldo Pinali Doederlein's Blog at java.net</span>
</li>
<li id="cite_note-20"><span class="mw-cite-backlink"><b><a href="#cite_ref-20">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://java.sun.com/j2se/1.5.0/docs/guide/vm/class-data-sharing.html">Class Data Sharing</a> at java.sun.com</span>
</li>
<li id="cite_note-21"><span class="mw-cite-backlink"><b><a href="#cite_ref-21">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.artima.com/forums/flat.jsp?forum=121&thread=56613">Class Data Sharing in JDK 1.5.0</a> in Java Buzz Forum
at <a rel="nofollow" class="external text" href="http://www.artima.com/">artima developer</a></span>
</li>
<li id="cite_note-symantec_compiler-22"><span class="mw-cite-backlink"><b><a href="#cite_ref-symantec_compiler_22-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFMckay" class="citation web cs1">Mckay, Niali. <a rel="nofollow" class="external text" href="http://linxdigital.ca/java-four-times-faster-symantec-compiler.html">"Java gets four times faster with new Symantec just-in-time compiler"</a>.</cite></span>
</li>
<li id="cite_note-23"><span class="mw-cite-backlink"><b><a href="#cite_ref-23">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://java.sun.com/performance/reference/whitepapers/5.0_performance.html">Sun overview of performance improvements between 1.4 and 5.0 versions.</a></span>
</li>
<li id="cite_note-24"><span class="mw-cite-backlink"><b><a href="#cite_ref-24">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://weblogs.java.net/blog/campbell/archive/2005/07/strcrazier_perf.html">STR-Crazier: Performance Improvements in Mustang</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20070105224757/http://weblogs.java.net/blog/campbell/archive/2005/07/strcrazier_perf.html">Archived</a> January 5, 2007, at the <a href="Wayback_Machine" title="Wayback Machine">Wayback Machine</a> in Chris Campbell's Blog at java.net</span>
</li>
<li id="cite_note-25"><span class="mw-cite-backlink"><b><a href="#cite_ref-25">^</a></b></span> <span class="reference-text">See <a rel="nofollow" class="external text" href="https://web.archive.org/web/20070112101848/http://jroller.com/page/dgilbert?entry=is_java_se_1_6">here</a> for a benchmark showing a performance boost of about 60% from Java 5.0 to 6 for the application <a rel="nofollow" class="external text" href="http://www.jfree.org">JFreeChart</a></span>
</li>
<li id="cite_note-26"><span class="mw-cite-backlink"><b><a href="#cite_ref-26">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://java.sun.com/performance/reference/whitepapers/6_performance.html">Java SE 6 Performance White Paper</a> at <a rel="nofollow" class="external free" href="http://java.sun.com">http://java.sun.com</a></span>
</li>
<li id="cite_note-jrecache-27"><span class="mw-cite-backlink">^ <a href="#cite_ref-jrecache_27-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-jrecache_27-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><cite id="CITEREFHaase2007" class="citation web cs1">Haase, Chet (May 2007). <a rel="nofollow" class="external text" href="http://java.sun.com/developer/technicalArticles/javase/consumerjre#Quickstarter">"Consumer JRE: Leaner, Meaner Java Technology"</a>. Sun Microsystems<span class="reference-accessdate">. Retrieved <span class="nowrap">July 27,</span> 2007</span>. <q><i>At the OS level, all of these megabytes have to be read from disk, which is a very slow operation. Actually, it's the seek time of the disk that's the killer; reading large files sequentially is relatively fast, but seeking the bits that we actually need is not. So even though we only need a small fraction of the data in these large files for any particular application, the fact that we're seeking all over within the files means that there is plenty of disk activity.</i></q></cite></span>
</li>
<li id="cite_note-28"><span class="mw-cite-backlink"><b><a href="#cite_ref-28">^</a></b></span> <span class="reference-text"><cite id="CITEREFHaase2007" class="citation web cs1">Haase, Chet (May 2007). <a rel="nofollow" class="external text" href="http://java.sun.com/developer/technicalArticles/javase/consumerjre#JavaKernel">"Consumer JRE: Leaner, Meaner Java Technology"</a>. Sun Microsystems<span class="reference-accessdate">. Retrieved <span class="nowrap">July 27,</span> 2007</span>.</cite></span>
</li>
<li id="cite_note-29"><span class="mw-cite-backlink"><b><a href="#cite_ref-29">^</a></b></span> <span class="reference-text"><cite id="CITEREFHaase2007" class="citation web cs1">Haase, Chet (May 2007). <a rel="nofollow" class="external text" href="http://java.sun.com/developer/technicalArticles/javase/consumerjre#Performance">"Consumer JRE: Leaner, Meaner Java Technology"</a>. Sun Microsystems<span class="reference-accessdate">. Retrieved <span class="nowrap">July 27,</span> 2007</span>.</cite></span>
</li>
<li id="cite_note-30"><span class="mw-cite-backlink"><b><a href="#cite_ref-30">^</a></b></span> <span class="reference-text"><cite id="CITEREFCampbell2007" class="citation web cs1">Campbell, Chris (April 7, 2007). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20110605111343/http://weblogs.java.net/blog/campbell/archive/2007/04/faster_java_2d.html">"Faster Java 2D Via Shaders"</a>. Archived from <a rel="nofollow" class="external text" href="https://weblogs.java.net/blog/campbell/archive/2007/04/faster_java_2d.html">the original</a> on June 5, 2011<span class="reference-accessdate">. Retrieved <span class="nowrap">January 18,</span> 2011</span>.</cite></span>
</li>
<li id="cite_note-31"><span class="mw-cite-backlink"><b><a href="#cite_ref-31">^</a></b></span> <span class="reference-text"><cite id="CITEREFHaase2007" class="citation web cs1">Haase, Chet (May 2007). <a rel="nofollow" class="external text" href="http://java.sun.com/developer/technicalArticles/javase/consumerjre">"Consumer JRE: Leaner, Meaner Java Technology"</a>. Sun Microsystems<span class="reference-accessdate">. Retrieved <span class="nowrap">July 27,</span> 2007</span>.</cite></span>
</li>
<li id="cite_note-32"><span class="mw-cite-backlink"><b><a href="#cite_ref-32">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.jcp.org/en/jsr/detail?id=292">"JSR 292: Supporting Dynamically Typed Languages on the Java Platform"</a>. jcp.org<span class="reference-accessdate">. Retrieved <span class="nowrap">May 28,</span> 2008</span>.</cite></span>
</li>
<li id="cite_note-33"><span class="mw-cite-backlink"><b><a href="#cite_ref-33">^</a></b></span> <span class="reference-text"><cite id="CITEREFGoetz2008" class="citation web cs1">Goetz, Brian (March 4, 2008). <a rel="nofollow" class="external text" href="http://www.ibm.com/developerworks/java/library/j-jtp03048.html?ca">"Java theory and practice: Stick a fork in it, Part 2"</a>. <i><a href="IBM" title="IBM">IBM</a></i><span class="reference-accessdate">. Retrieved <span class="nowrap">March 9,</span> 2008</span>.</cite></span>
</li>
<li id="cite_note-34"><span class="mw-cite-backlink"><b><a href="#cite_ref-34">^</a></b></span> <span class="reference-text"><cite id="CITEREFLorimer2008" class="citation web cs1">Lorimer, R.J. (March 21, 2008). <a rel="nofollow" class="external text" href="http://www.infoq.com/news/2008/03/fork_join">"Parallelism with Fork/Join in Java 7"</a>. infoq.com<span class="reference-accessdate">. Retrieved <span class="nowrap">May 28,</span> 2008</span>.</cite></span>
</li>
<li id="cite_note-35"><span class="mw-cite-backlink"><b><a href="#cite_ref-35">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://developers.sun.com/learning/javaoneonline/2006/coreplatform/TS-3412.pdf">"New Compiler Optimizations in the Java HotSpot Virtual Machine"</a> <span class="cs1-format">(PDF)</span>. Sun Microsystems. May 2006<span class="reference-accessdate">. Retrieved <span class="nowrap">May 30,</span> 2008</span>.</cite></span>
</li>
<li id="cite_note-36"><span class="mw-cite-backlink"><b><a href="#cite_ref-36">^</a></b></span> <span class="reference-text"><cite id="CITEREFHumble2008" class="citation web cs1">Humble, Charles (May 13, 2008). <a rel="nofollow" class="external text" href="http://www.infoq.com/news/2008/05/g1">"JavaOne: Garbage First"</a>. infoq.com<span class="reference-accessdate">. Retrieved <span class="nowrap">September 7,</span> 2008</span>.</cite></span>
</li>
<li id="cite_note-37"><span class="mw-cite-backlink"><b><a href="#cite_ref-37">^</a></b></span> <span class="reference-text">
<cite id="CITEREFCoward2008" class="citation web cs1">Coward, Danny (November 12, 2008). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20111208114910/http://blogs.oracle.com/theplanetarium/entry/java_vm_trying_a_new">"Java VM: Trying a new Garbage Collector for JDK 7"</a>. Archived from <a rel="nofollow" class="external text" href="http://blogs.oracle.com/theplanetarium/entry/java_vm_trying_a_new">the original</a> on December 8, 2011<span class="reference-accessdate">. Retrieved <span class="nowrap">November 15,</span> 2008</span>.</cite></span>
</li>
<li id="cite_note-38"><span class="mw-cite-backlink"><b><a href="#cite_ref-38">^</a></b></span> <span class="reference-text">
<cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20150125100238/http://benchmarksgame.alioth.debian.org/u32q/which-programs-are-fastest.html">"Computer Language Benchmarks Game"</a>. benchmarksgame.alioth.debian.org. Archived from <a rel="nofollow" class="external text" href="http://benchmarksgame.alioth.debian.org/u32q/which-programs-are-fastest.html">the original</a> on January 25, 2015<span class="reference-accessdate">. Retrieved <span class="nowrap">June 2,</span> 2011</span>.</cite></span>
</li>
<li id="cite_note-39"><span class="mw-cite-backlink"><b><a href="#cite_ref-39">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20150113040554/http://benchmarksgame.alioth.debian.org/u64q/java.html">"Computer Language Benchmarks Game"</a>. benchmarksgame.alioth.debian.org. Archived from <a rel="nofollow" class="external text" href="http://benchmarksgame.alioth.debian.org/u64q/java.html">the original</a> on January 13, 2015<span class="reference-accessdate">. Retrieved <span class="nowrap">June 2,</span> 2011</span>.</cite></span>
</li>
<li id="cite_note-40"><span class="mw-cite-backlink"><b><a href="#cite_ref-40">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20150110034032/http://benchmarksgame.alioth.debian.org/u64q/csharp.html">"Computer Language Benchmarks Game"</a>. benchmarksgame.alioth.debian.org. Archived from <a rel="nofollow" class="external text" href="http://benchmarksgame.alioth.debian.org/u64q/csharp.html">the original</a> on January 10, 2015<span class="reference-accessdate">. Retrieved <span class="nowrap">June 2,</span> 2011</span>.</cite></span>
</li>
<li id="cite_note-41"><span class="mw-cite-backlink"><b><a href="#cite_ref-41">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20150102034407/http://benchmarksgame.alioth.debian.org/u64q/python.html">"Computer Language Benchmarks Game"</a>. benchmarksgame.alioth.debian.org. Archived from <a rel="nofollow" class="external text" href="http://benchmarksgame.alioth.debian.org/u64q/python.html">the original</a> on January 2, 2015<span class="reference-accessdate">. Retrieved <span class="nowrap">June 2,</span> 2011</span>.</cite></span>
</li>
<li id="cite_note-42"><span class="mw-cite-backlink"><b><a href="#cite_ref-42">^</a></b></span> <span class="reference-text">: 260/250 <a href="Frame_rate" title="Frame rate">frame/s</a> versus 245 frame/s (see <a rel="nofollow" class="external text" href="http://www.bytonic.de/html/benchmarks.html">benchmark</a>)</span>
</li>
<li id="cite_note-43"><span class="mw-cite-backlink"><b><a href="#cite_ref-43">^</a></b></span> <span class="reference-text"><cite id="CITEREFHundt" class="citation journal cs1">Hundt, Robert. <a rel="nofollow" class="external text" href="https://days2011.scala-lang.org/sites/days2011/files/ws3-1-Hundt.pdf">"Loop Recognition in C++/Java/Go/Scala"</a> <span class="cs1-format">(PDF)</span>. <i>Scala Days 2011</i>. Stanford, California<span class="reference-accessdate">. Retrieved <span class="nowrap">March 23,</span> 2014</span>.</cite></span>
</li>
<li id="cite_note-44"><span class="mw-cite-backlink"><b><a href="#cite_ref-44">^</a></b></span> <span class="reference-text"><cite id="CITEREFL._GherardiD._BrugaliD._Comotti2012" class="citation web cs1">L. Gherardi; D. Brugali; D. Comotti (2012). <a rel="nofollow" class="external text" href="http://www.best-of-robotics.org/pages/publications/gherardi12java.pdf">"A Java vs. C++ performance evaluation: a 3D modeling benchmark"</a> <span class="cs1-format">(PDF)</span>. <a href="University_of_Bergamo" title="University of Bergamo">University of Bergamo</a><span class="reference-accessdate">. Retrieved <span class="nowrap">March 23,</span> 2014</span>. <q><i>Using the Server compiler, which is best tuned for long-running applications, have instead demonstrated that Java is from 1.09 to 1.91 times slower(...)In conclusion, the results obtained with the server compiler and these important features suggest that Java can be considered a valid alternative to C++</i></q></cite></span>
</li>
<li id="cite_note-idiom-45"><span class="mw-cite-backlink"><b><a href="#cite_ref-idiom_45-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFLewis,_J.P.Neumann,_Ulrich" class="citation web cs1">Lewis, J.P.; Neumann, Ulrich. <a rel="nofollow" class="external text" href="http://scribblethink.org/Computer/javaCbenchmark.html">"Performance of Java versus C++"</a>. Computer Graphics and Immersive Technology Lab, University of Southern California.</cite></span>
</li>
<li id="cite_note-47"><span class="mw-cite-backlink"><b><a href="#cite_ref-47">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://java.sun.com/developer/technicalArticles/Networking/HotSpot/inlining.html">"The Java HotSpot Performance Engine: Method Inlining Example"</a>. <a href="Oracle_Corporation" title="Oracle Corporation">Oracle Corporation</a><span class="reference-accessdate">. Retrieved <span class="nowrap">June 11,</span> 2011</span>.</cite></span>
</li>
<li id="cite_note-48"><span class="mw-cite-backlink"><b><a href="#cite_ref-48">^</a></b></span> <span class="reference-text"><cite id="CITEREFNutter2008" class="citation web cs1">Nutter, Charles (May 3, 2008). <a rel="nofollow" class="external text" href="http://blog.headius.com/2008/05/power-of-jvm.html">"The Power of the JVM"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">June 11,</span> 2011</span>. <q><i>What happens if you've already inlined A's method when B comes along? Here again the JVM shines. Because the JVM is essentially a dynamic language runtime under the covers, it remains ever-vigilant, watching for exactly these sorts of events to happen. And here's the really cool part: when situations change, the JVM can deoptimize. This is a crucial detail. Many other runtimes can only do their optimization once. C compilers must do it all ahead of time, during the build. Some allow you to profile your application and feed that into subsequent builds, but once you've released a piece of code it's essentially as optimized as it will ever get. Other VM-like systems like the CLR do have a JIT phase, but it happens early in execution (maybe before the system even starts executing) and doesn't ever happen again. The JVM's ability to deoptimize and return to interpretation gives it room to be optimistic...room to make ambitious guesses and gracefully fall back to a safe state, to try again later.</i></q></cite></span>
</li>
<li id="cite_note-49"><span class="mw-cite-backlink"><b><a href="#cite_ref-49">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.ddj.com/java/184401976?pgno=2">"Microbenchmarking C++, C#, and Java: 32-bit integer arithmetic"</a>. <a href="Dr._Dobb's_Journal" title="Dr. Dobb's Journal">Dr. Dobb's Journal</a>. July 1, 2005<span class="reference-accessdate">. Retrieved <span class="nowrap">January 18,</span> 2011</span>.</cite></span>
</li>
<li id="cite_note-50"><span class="mw-cite-backlink"><b><a href="#cite_ref-50">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.ddj.com/java/184401976?pgno=12">"Microbenchmarking C++, C#, and Java: 64-bit double arithmetic"</a>. <a href="Dr._Dobb's_Journal" title="Dr. Dobb's Journal">Dr. Dobb's Journal</a>. July 1, 2005<span class="reference-accessdate">. Retrieved <span class="nowrap">January 18,</span> 2011</span>.</cite></span>
</li>
<li id="cite_note-51"><span class="mw-cite-backlink"><b><a href="#cite_ref-51">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.ddj.com/java/184401976?pgno=15">"Microbenchmarking C++, C#, and Java: File I/O"</a>. <a href="Dr._Dobb's_Journal" title="Dr. Dobb's Journal">Dr. Dobb's Journal</a>. July 1, 2005<span class="reference-accessdate">. Retrieved <span class="nowrap">January 18,</span> 2011</span>.</cite></span>
</li>
<li id="cite_note-52"><span class="mw-cite-backlink"><b><a href="#cite_ref-52">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.ddj.com/java/184401976?pgno=17">"Microbenchmarking C++, C#, and Java: Exception"</a>. <a href="Dr._Dobb's_Journal" title="Dr. Dobb's Journal">Dr. Dobb's Journal</a>. July 1, 2005<span class="reference-accessdate">. Retrieved <span class="nowrap">January 18,</span> 2011</span>.</cite></span>
</li>
<li id="cite_note-53"><span class="mw-cite-backlink"><b><a href="#cite_ref-53">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.ddj.com/java/184401976?pgno=19">"Microbenchmarking C++, C#, and Java: Array"</a>. <a href="Dr._Dobb's_Journal" title="Dr. Dobb's Journal">Dr. Dobb's Journal</a>. July 1, 2005<span class="reference-accessdate">. Retrieved <span class="nowrap">January 18,</span> 2011</span>.</cite></span>
</li>
<li id="cite_note-54"><span class="mw-cite-backlink"><b><a href="#cite_ref-54">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.ddj.com/java/184401976?pgno=19">"Microbenchmarking C++, C#, and Java: Trigonometric functions"</a>. <a href="Dr._Dobb's_Journal" title="Dr. Dobb's Journal">Dr. Dobb's Journal</a>. July 1, 2005<span class="reference-accessdate">. Retrieved <span class="nowrap">January 18,</span> 2011</span>.</cite></span>
</li>
<li id="cite_note-55"><span class="mw-cite-backlink"><b><a href="#cite_ref-55">^</a></b></span> <span class="reference-text">Yi Zhao, Jin Shi, Kai Zheng, Haichuan Wang, Haibo Lin and Ling Shao, <a rel="nofollow" class="external text" href="http://portal.acm.org/citation.cfm?id=1640116">Allocation wall: a limiting factor of Java applications on emerging multi-core platforms</a>, Proceedings of the 24th ACM SIGPLAN conference on Object oriented programming systems languages and applications, 2009.</span>
</li>
<li id="cite_note-56"><span class="mw-cite-backlink"><b><a href="#cite_ref-56">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20140809222603/http://www.azulsystems.com/sites/default/files/images/c4_paper_acm_0.pdf">"C4: The Continuously Concurrent Compacting Collector"</a> <span class="cs1-format">(PDF)</span>. Archived from <a rel="nofollow" class="external text" href="http://www.azulsystems.com/sites/default/files/images/c4_paper_acm_0.pdf">the original</a> <span class="cs1-format">(PDF)</span> on August 9, 2014<span class="reference-accessdate">. Retrieved <span class="nowrap">October 29,</span> 2013</span>.</cite></span>
</li>
<li id="cite_note-57"><span class="mw-cite-backlink"><b><a href="#cite_ref-57">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.theregister.co.uk/2007/06/15/azul_releases_7200_systems/">Azul bullies Java with 768 core machine</a></span>
</li>
<li id="cite_note-58"><span class="mw-cite-backlink"><b><a href="#cite_ref-58">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.codeproject.com/KB/dotnet/RuntimePerformance.aspx">"Benchmark start-up and system performance for .Net, Mono, Java, C++ and their respective UI"</a>. September 2, 2010.</cite></span>
</li>
<li id="cite_note-59"><span class="mw-cite-backlink"><b><a href="#cite_ref-59">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20060516011057/http://forums.java.net/jive/thread.jspa?messageID=94530">"How fast is the new verifier?"</a>. 7 February 2006. Archived from <a rel="nofollow" class="external text" href="http://forums.java.net/jive/thread.jspa?messageID=94530">the original</a> on 16 May 2006<span class="reference-accessdate">. Retrieved <span class="nowrap">9 May</span> 2007</span>.</cite></span>
</li>
<li id="cite_note-60"><span class="mw-cite-backlink"><b><a href="#cite_ref-60">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://martiansoftware.com/nailgun/">Nailgun</a></span>
</li>
<li id="cite_note-61"><span class="mw-cite-backlink"><b><a href="#cite_ref-61">^</a></b></span> <span class="reference-text">The Nailgun <a rel="nofollow" class="external text" href="http://martiansoftware.com/nailgun/background.html">Background</a> page demonstrates "<i>best case scenario</i>" speedup of 33 times (for scripted <a href="%22Hello%2C_World!%22_program" title=""Hello, World!" program">"Hello, World!" programs</a> i.e., short-run programs).</span>
</li>
<li id="cite_note-62"><span class="mw-cite-backlink"><b><a href="#cite_ref-62">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.javamex.com/tutorials/memory/object_memory_usage.shtml">"How to calculate the memory usage of Java objects"</a>.</cite></span>
</li>
<li id="cite_note-63"><span class="mw-cite-backlink"><b><a href="#cite_ref-63">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20080221131118/http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=195">"InformIT: C++ Reference Guide > the Object Model"</a>. Archived from <a rel="nofollow" class="external text" href="http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=195">the original</a> on 21 February 2008<span class="reference-accessdate">. Retrieved <span class="nowrap">22 June</span> 2009</span>.</cite></span>
</li>
<li id="cite_note-64"><span class="mw-cite-backlink"><b><a href="#cite_ref-64">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external free" href="https://www.youtube.com/watch?v=M91w0SBZ-wc">https://www.youtube.com/watch?v=M91w0SBZ-wc</a> : Understanding Java Garbage Collection - a talk by Gil Tene at JavaOne</span>
</li>
<li id="cite_note-65"><span class="mw-cite-backlink"><b><a href="#cite_ref-65">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.tommti-systems.de/go.html?http://www.tommti-systems.de/main-Dateien/reviews/languages/benchmarks.html">".: ToMMTi-Systems :: Hinter den Kulissen moderner 3D-Hardware"</a>.</cite></span>
</li>
<li id="cite_note-66"><span class="mw-cite-backlink"><b><a href="#cite_ref-66">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://java.sun.com/javase/6/docs/api/java/lang/Math.html">"Math (Java Platform SE 6)"</a>. <a href="Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a><span class="reference-accessdate">. Retrieved <span class="nowrap">June 8,</span> 2008</span>.</cite></span>
</li>
<li id="cite_note-67"><span class="mw-cite-backlink"><b><a href="#cite_ref-67">^</a></b></span> <span class="reference-text">
<cite id="CITEREFGosling2005" class="citation web cs1">Gosling, James (July 27, 2005). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20110812023545/http://blogs.oracle.com/jag/entry/transcendental_meditation">"Transcendental Meditation"</a>. Archived from <a rel="nofollow" class="external text" href="http://blogs.oracle.com/jag/entry/transcendental_meditation">the original</a> on August 12, 2011<span class="reference-accessdate">. Retrieved <span class="nowrap">June 8,</span> 2008</span>.</cite></span>
</li>
<li id="cite_note-68"><span class="mw-cite-backlink"><b><a href="#cite_ref-68">^</a></b></span> <span class="reference-text"><cite id="CITEREFCowell-Shah2004" class="citation web cs1">Cowell-Shah, Christopher W. (January 8, 2004). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20181011222232/http://www.osnews.com/story/5602%26page%3D3">"Nine Language Performance Round-up: Benchmarking Math & File I/O"</a>. Archived from <a rel="nofollow" class="external text" href="http://www.osnews.com/story/5602&page=3">the original</a> on October 11, 2018<span class="reference-accessdate">. Retrieved <span class="nowrap">June 8,</span> 2008</span>.</cite></span>
</li>
<li id="cite_note-69"><span class="mw-cite-backlink"><b><a href="#cite_ref-69">^</a></b></span> <span class="reference-text"><cite id="CITEREFWilsonJeff_Kesselman2001" class="citation web cs1">Wilson, Steve; Jeff Kesselman (2001). <a rel="nofollow" class="external text" href="http://java.sun.com/docs/books/performance/1st_edition/html/JPNativeCode.fm.html">"JavaTM Platform Performance: Using Native Code"</a>. <a href="Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a><span class="reference-accessdate">. Retrieved <span class="nowrap">February 15,</span> 2008</span>.</cite></span>
</li>
<li id="cite_note-70"><span class="mw-cite-backlink"><b><a href="#cite_ref-70">^</a></b></span> <span class="reference-text"><cite id="CITEREFKurzyniecVaidy_Sunderam" class="citation web cs1">Kurzyniec, Dawid; Vaidy Sunderam. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20050214080519/http://janet-project.sourceforge.net/papers/jnibench.pdf">"Efficient Cooperation between Java and Native Codes - JNI Performance Benchmark"</a> <span class="cs1-format">(PDF)</span>. Archived from <a rel="nofollow" class="external text" href="https://janet-project.sourceforge.net/papers/jnibench.pdf">the original</a> <span class="cs1-format">(PDF)</span> on 14 February 2005<span class="reference-accessdate">. Retrieved <span class="nowrap">15 February</span> 2008</span>.</cite></span>
</li>
<li id="cite_note-FOOTNOTEBloch2018285Chapter_§11_Item_66:_Use_native_methods_judiciously-71"><span class="mw-cite-backlink"><b><a href="#cite_ref-FOOTNOTEBloch2018285Chapter_§11_Item_66:_Use_native_methods_judiciously_71-0">^</a></b></span> <span class="reference-text"><a href="#CITEREFBloch2018">Bloch 2018</a>, p. 285, Chapter §11 Item 66: Use native methods judiciously.</span>
</li>
<li id="cite_note-72"><span class="mw-cite-backlink"><b><a href="#cite_ref-72">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://jna.dev.java.net/#performance">"How does JNA performance compare to custom JNI?"</a>. <a href="Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a><span class="reference-accessdate">. Retrieved <span class="nowrap">December 26,</span> 2009</span>.</cite></span>
</li>
<li id="cite_note-73"><span class="mw-cite-backlink"><b><a href="#cite_ref-73">^</a></b></span> <span class="reference-text"><cite id="CITEREFIgor2005" class="citation web cs1">Igor, Križnar (10 May 2005). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20080704103309/http://cosylib.cosylab.com/pub/CSS/DOC-SWT_Vs._Swing_Performance_Comparison.pdf">"SWT Vs. Swing Performance Comparison"</a> <span class="cs1-format">(PDF)</span>. cosylab.com. Archived from <a rel="nofollow" class="external text" href="http://cosylib.cosylab.com/pub/CSS/DOC-SWT_Vs._Swing_Performance_Comparison.pdf">the original</a> <span class="cs1-format">(PDF)</span> on 4 July 2008<span class="reference-accessdate">. Retrieved <span class="nowrap">24 May</span> 2008</span>. <q><i>It is hard to give a rule-of-thumb where SWT would outperform Swing, or vice versa. In some environments (e.g., Windows), SWT is a winner. In others (Linux, <a href="VMware" title="VMware">VMware</a> hosting Windows), Swing and its redraw optimization outperform SWT significantly. Differences in performance are significant: factors of 2 and more are common, in either direction</i></q></cite></span>
</li>
<li id="cite_note-74"><span class="mw-cite-backlink"><b><a href="#cite_ref-74">^</a></b></span> <span class="reference-text"><cite id="CITEREFBrian_AmedroVladimir_BodnartchoukDenis_CaromelChristian_Delbe2008" class="citation web cs1">Brian Amedro; Vladimir Bodnartchouk; Denis Caromel; Christian Delbe; Fabrice Huet; Guillermo L. Taboada (August 2008). <a rel="nofollow" class="external text" href="http://hal.inria.fr/inria-00312039/en">"Current State of Java for HPC"</a>. <a href="INRIA" class="mw-redirect" title="INRIA">INRIA</a><span class="reference-accessdate">. Retrieved <span class="nowrap">September 9,</span> 2008</span>. <q><i>We first perform some micro benchmarks for various JVMs, showing the overall good performance for basic arithmetic operations(...). Comparing this implementation with a Fortran/MPI one, we show that they have similar performance on computation intensive benchmarks, but still have scalability issues when performing intensive communications.</i></q></cite></span>
</li>
<li id="cite_note-75"><span class="mw-cite-backlink"><b><a href="#cite_ref-75">^</a></b></span> <span class="reference-text"><cite id="CITEREFOwen_O'Malley_-_Yahoo!_Grid_Computing_Team2008" class="citation web cs1">Owen O'Malley - Yahoo! Grid Computing Team (July 2008). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20091015215436/http://developer.yahoo.net/blogs/hadoop/2008/07/apache_hadoop_wins_terabyte_sort_benchmark.html">"Apache Hadoop Wins Terabyte Sort Benchmark"</a>. Archived from <a rel="nofollow" class="external text" href="http://developer.yahoo.net/blogs/hadoop/2008/07/apache_hadoop_wins_terabyte_sort_benchmark.html">the original</a> on 15 October 2009<span class="reference-accessdate">. Retrieved <span class="nowrap">21 December</span> 2008</span>. <q><i>This is the first time that either a Java or an open source program has won.</i></q></cite></span>
</li>
<li id="cite_note-76"><span class="mw-cite-backlink"><b><a href="#cite_ref-76">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20090516184005/http://developer.yahoo.net/blogs/hadoop/2009/05/hadoop_sorts_a_petabyte_in_162.html">"Hadoop Sorts a Petabyte in 16.25 Hours and a Terabyte in 62 Seconds"</a>. <a href="CNET.com" class="mw-redirect" title="CNET.com">CNET.com</a>. May 11, 2009. Archived from <a rel="nofollow" class="external text" href="http://developer.yahoo.net/blogs/hadoop/2009/05/hadoop_sorts_a_petabyte_in_162.html">the original</a> on May 16, 2009<span class="reference-accessdate">. Retrieved <span class="nowrap">September 8,</span> 2010</span>. <q><i>The hardware and operating system details are:(...)Sun Java JDK (1.6.0_05-b13 and 1.6.0_13-b03) (32 and 64 bit)</i></q></cite></span>
</li>
<li id="cite_note-77"><span class="mw-cite-backlink"><b><a href="#cite_ref-77">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://news.cnet.com/8301-13846_3-10242392-62.html">"Hadoop breaks data-sorting world records"</a>. <a href="CNET.com" class="mw-redirect" title="CNET.com">CNET.com</a>. May 15, 2009<span class="reference-accessdate">. Retrieved <span class="nowrap">September 8,</span> 2010</span>.</cite></span>
</li>
<li id="cite_note-78"><span class="mw-cite-backlink"><b><a href="#cite_ref-78">^</a></b></span> <span class="reference-text"><cite id="CITEREFChris_NybergMehul_Shah" class="citation web cs1">Chris Nyberg; Mehul Shah. <a rel="nofollow" class="external text" href="http://sortbenchmark.org/">"Sort Benchmark Home Page"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">November 30,</span> 2010</span>.</cite></span>
</li>
<li id="cite_note-googlemapreduce-79"><span class="mw-cite-backlink"><b><a href="#cite_ref-googlemapreduce_79-0">^</a></b></span> <span class="reference-text"><cite id="CITEREFCzajkowski2008" class="citation web cs1">Czajkowski, Grzegorz (November 21, 2008). <a rel="nofollow" class="external text" href="http://googleblog.blogspot.com/2008/11/sorting-1pb-with-mapreduce.html">"Sorting 1PB with MapReduce"</a><span class="reference-accessdate">. Retrieved <span class="nowrap">December 1,</span> 2010</span>.</cite></span>
</li>
<li id="cite_note-80"><span class="mw-cite-backlink"><b><a href="#cite_ref-80">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20101018212921/http://topcoder.com/home/tco10/2010/06/08/algorithms-problem-writing/">"TCO10"</a>. Archived from <a rel="nofollow" class="external text" href="http://topcoder.com/home/tco10/2010/06/08/algorithms-problem-writing/">the original</a> on 18 October 2010<span class="reference-accessdate">. Retrieved <span class="nowrap">21 June</span> 2010</span>.</cite></span>
</li>
<li id="cite_note-81"><span class="mw-cite-backlink"><b><a href="#cite_ref-81">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://acm.timus.ru/help.aspx?topic=java&locale=en">"How to write Java solutions @ Timus Online Judge"</a>.</cite></span>
</li>
<li id="cite_note-82"><span class="mw-cite-backlink"><b><a href="#cite_ref-82">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://acm.pku.edu.cn/JudgeOnline/faq.htm#q11">"FAQ"</a>.</cite></span>
</li>
<li id="cite_note-83"><span class="mw-cite-backlink"><b><a href="#cite_ref-83">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20100629135921/http://acm.tju.edu.cn/toj/faq.html#qj">"FAQ | TJU ACM-ICPC Online Judge"</a>. Archived from <a rel="nofollow" class="external text" href="http://acm.tju.edu.cn/toj/faq.html#qj">the original</a> on June 29, 2010<span class="reference-accessdate">. Retrieved <span class="nowrap">May 25,</span> 2010</span>.</cite></span>
</li>
<li id="cite_note-84"><span class="mw-cite-backlink"><b><a href="#cite_ref-84">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.codechef.com/wiki/faq#How_does_the_time_limit_work">"FAQ | CodeChef"</a>.</cite></span>
</li>
<li id="cite_note-85"><span class="mw-cite-backlink"><b><a href="#cite_ref-85">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20120219004452/http://acm.xidian.edu.cn/land/faq">"HomePage of Xidian Univ. Online Judge"</a>. Archived from <a rel="nofollow" class="external text" href="http://acm.xidian.edu.cn/land/faq">the original</a> on 19 February 2012<span class="reference-accessdate">. Retrieved <span class="nowrap">13 November</span> 2011</span>.</cite></span>
</li>
<li id="cite_note-86"><span class="mw-cite-backlink"><b><a href="#cite_ref-86">^</a></b></span> <span class="reference-text"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://poj.org/faq.htm#q9">"FAQ"</a>.</cite></span>
</li>
</ol></div>
<div class="mw-heading mw-heading2"><h2 id="References">References</h2></div>
<ul><li><cite id="CITEREFBloch2018" class="citation book cs1">Bloch, Joshua (2018). <i>"Effective Java: Programming Language Guide"</i> (third ed.). Addison-Wesley. <a href="ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a> <bdi>978-0134685991</bdi>.</cite></li></ul>
<div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2></div>
<ul><li><a rel="nofollow" class="external text" href="http://javaperformancetuning.com/">Site dedicated to Java performance information</a></li>
<li><a rel="nofollow" class="external text" href="http://prefetch.net/presentations/DebuggingJavaPerformance.pdf">Debugging Java performance problems</a></li>
<li><a rel="nofollow" class="external text" href="http://java.sun.com/docs/performance/">Sun's Java performance portal</a></li>
<li><a rel="nofollow" class="external text" href="https://github.com/raydac/Java-performance-mind-map">The Mind-map based on presentations of engineers in the SPb Oracle branch (as big PNG image)</a></li></ul>
<div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">
/* start https://en.wikipedia.org/ */
.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}
/* end https://en.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r1236075235">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}
/* end https://en.wikipedia.org/ */
</style></div><div role="navigation" class="navbox" aria-labelledby="Java_(software_platform)419" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="3"><style data-mw-deduplicate="TemplateStyles:r1239400231">
/* start https://en.wikipedia.org/ */
.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}
/* end https://en.wikipedia.org/ */
</style><div id="Java_(software_platform)419" style="font-size:114%;margin:0 4em"><a href="Java_(software_platform)" title="Java (software platform)">Java (software platform)</a></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">Platforms</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Java_virtual_machine" title="Java virtual machine">JVM</a></li>
<li><a href="Java_Platform%2C_Micro_Edition" title="Java Platform, Micro Edition">Java ME</a> (Micro)</li>
<li><a href="Java_Platform%2C_Standard_Edition" title="Java Platform, Standard Edition">Java SE</a> (Standard)</li>
<li><a href="Jakarta_EE" title="Jakarta EE">Jakarta EE</a> (Enterprise)</li>
<li><a href="Java_Card" title="Java Card">Java Card</a></li>
<li><a href="Android_software_development#SDK" title="Android software development">Android SDK</a></li>
<li><a href="GraalVM" title="GraalVM">GraalVM</a></li></ul>
</div></td><td class="noviewer navbox-image" rowspan="5" style="width:1px;padding:0 0 0 2px"><div><span typeof="mw:File"></span></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Technologies</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%">Oracle</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Squawk_virtual_machine" title="Squawk virtual machine">Squawk</a></li>
<li><a href="Java_Development_Kit" title="Java Development Kit">Java Development Kit</a></li>
<li><a href="OpenJDK" title="OpenJDK">OpenJDK</a></li>
<li><a href="Java_virtual_machine" title="Java virtual machine">Java virtual machine</a></li>
<li><a href="JavaFX" title="JavaFX">JavaFX</a></li>
<li><a href="Maxine_Virtual_Machine" title="Maxine Virtual Machine">Maxine VM</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Platform</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Java_applet" title="Java applet">Applets</a></li>
<li><a href="Jakarta_Servlet" title="Jakarta Servlet">Servlets</a></li>
<li><a href="MIDlet" title="MIDlet">MIDlets</a></li>
<li><a href="Jakarta_Server_Pages" title="Jakarta Server Pages">JSP</a></li>
<li><a href="Jakarta_Faces" title="Jakarta Faces">JSF</a></li>
<li><a href="Java_Web_Start" title="Java Web Start">Web Start</a> (JNLP)</li>
<li><a href="Pack200" title="Pack200">Pack200</a></li>
<li><a href="Java_Platform_Module_System" title="Java Platform Module System">Modules</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Major<br>third-party</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Blackdown_Java" title="Blackdown Java">Blackdown</a></li>
<li><a href="Eclipse_(software)" title="Eclipse (software)">Eclipse</a></li>
<li><a href="GNU_Classpath" title="GNU Classpath">GNU Classpath</a></li>
<li><a href="Google_Web_Toolkit" title="Google Web Toolkit">GWT</a></li>
<li><a href="Apache_Harmony" title="Apache Harmony">Harmony</a></li>
<li><a href="Hibernate_(framework)" title="Hibernate (framework)">Hibernate</a></li>
<li><a href="IcedTea" title="IcedTea">IcedTea</a></li>
<li><a href="Jazelle" title="Jazelle">Jazelle</a></li>
<li><a href="Spring_Framework" title="Spring Framework">Spring</a></li>
<li><a href="Apache_Struts" title="Apache Struts">Struts</a></li>
<li><a href="Oracle_TopLink" title="Oracle TopLink">TopLink</a></li>
<li><a href="WildFly" title="WildFly">WildFly</a></li></ul>
</div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">History</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Java_version_history" title="Java version history">Java version history</a></li>
<li><a href="Java_Community_Process" title="Java Community Process">Java Community Process</a></li>
<li><a href="Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a></li>
<li><a href="Free_Java_implementations" title="Free Java implementations">Free Java implementations</a></li>
<li>Slogan: <i><a href="Write_once%2C_run_anywhere" title="Write once, run anywhere">Write once, run anywhere</a></i></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="List_of_JVM_languages" title="List of JVM languages">JVM<br>languages</a></th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Java_(programming_language)" title="Java (programming language)">Java</a></li>
<li><a href="BeanShell" title="BeanShell">BeanShell</a></li>
<li><a href="Clojure" title="Clojure">Clojure</a></li>
<li><a href="Groovy_(programming_language)" class="mw-redirect" title="Groovy (programming language)">Groovy</a></li>
<li><a href="JRuby" title="JRuby">JRuby</a></li>
<li><a href="Jython" title="Jython">Jython</a></li>
<li><a href="Kotlin_(programming_language)" title="Kotlin (programming language)">Kotlin</a></li>
<li><a href="Processing" title="Processing">Processing</a></li>
<li><a href="Rhino_(JavaScript_engine)" title="Rhino (JavaScript engine)">Rhino</a></li>
<li><a href="Scala_(programming_language)" title="Scala (programming language)">Scala</a></li>
<li><a href="Oxygene_(programming_language)" title="Oxygene (programming language)">Oxygene</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Community</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%">Conferences</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="JavaOne" title="JavaOne">JavaOne</a></li>
<li><a href="Devoxx" title="Devoxx">Devoxx</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Organizations</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="Apache_Software_Foundation" class="mw-redirect" title="Apache Software Foundation">Apache Software Foundation</a></li>
<li><a href="Eclipse_Foundation" title="Eclipse Foundation">Eclipse Foundation</a></li>
<li><a href="Java_Community_Process" title="Java Community Process">Java Community Process</a></li>
<li><a href="Oracle_Corporation" title="Oracle Corporation">Oracle Corporation</a></li>
<li><a href="Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a>, <a href="Sun_Microsystems_Laboratories" class="mw-redirect" title="Sun Microsystems Laboratories">Sun Microsystems Laboratories</a></li></ul>
</div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">People</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em">
<ul><li><a href="James_Gosling" title="James Gosling">James Gosling</a></li>
<li><a href="Arthur_van_Hoff" title="Arthur van Hoff">Arthur van Hoff</a></li>
<li><a href="Urs_H%C3%B6lzle" title="Urs Hölzle">Urs Hölzle</a></li>
<li><a href="Patrick_Naughton" class="new" title="Patrick Naughton (page does not exist)">Patrick Naughton</a></li></ul>
</div></td></tr></tbody></table><div></div></td></tr><tr><td class="navbox-abovebelow" colspan="3"><div><span class="noviewer" typeof="mw:File"><span title="Category"></span></span> <b>Category</b> • <span class="nowrap"><span class="skin-invert-image noviewer" typeof="mw:File"></span> </span><a href="Portal%3AComputer_programming" title="Portal:Computer programming">Computer programming portal</a></div></td></tr></tbody></table></div></div><!--htdig_noindex--><div><div class="zim-footer">
This article is issued from <a class="external text" title="Last edited on 2025-05-04" href="https://en.wikipedia.org/wiki/?title=Java_performance&oldid=1288785731">Wikipedia</a>. The text is available under <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en">Creative Commons Attribution-Share Alike 4.0</a> unless otherwise noted. Additional terms may apply for the media files.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
</body></html>